跳到主要内容

NC53 删除链表的倒数第n个节点

https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

这题是很简单的双指针问题,但是恶心在于边界条件,例如给的测试用例,当 n 等于 length 时怎么办,这里的解决方法是在 List 前面加个 Node 来避免 n 等于 length 的情况

package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/

/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
func removeNthFromEnd( head *ListNode , n int ) *ListNode {
//创建一个空节点作为头结点
dummy := &ListNode{}
dummy.Next = head
head = dummy

fast, slow := head, head
// 快指针先走 n 步,再等快指针到终点,慢指针就到倒数 n 了
for i := 0; i < n; i++ {
fast = fast.Next
}

for fast.Next != nil {
fast = fast.Next
slow = slow.Next
}

//删除慢指针所指节点的后继节点(后继节点刚好为倒数第n个节点)
slow.Next = slow.Next.Next

return head.Next
}